package copyengine.utils.encrypt
{

	public final class IntUtil
	{
		public function IntUtil()
		{
		}

		/**
		 * Rotates x left n bits
		 *
		 * @langversion ActionScript 3.0
		 * @playerversion Flash 8.5
		 * @tiptext
		 */
		public static function rol(x:int, n:int):int
		{
			return (x << n) | (x >>> (32 - n));
		}

		/** String for quick lookup of a hex character based on index */
		private static var hexChars:String = "0123456789abcdef";

		/**
		 * Outputs the hex value of a int, allowing the developer to specify
		 * the endinaness in the process.  Hex output is lowercase.
		 *
		 * @param n The int value to output as hex
		 * @param bigEndian Flag to output the int as big or little endian
		 * @return A string of length 8 corresponding to the
		 *        hex representation of n ( minus the leading "0x" )
		 * @langversion ActionScript 3.0
		 * @playerversion Flash 8.5
		 * @tiptext
		 */
		public static function toHex(n:int, bigEndian:Boolean = false):String
		{
			var s:String = "";

			if (bigEndian)
			{
				for (var i:int = 0; i < 4; i++)
				{
					s += hexChars.charAt((n >> ((3 - i) * 8 + 4)) & 0xF)
						+ hexChars.charAt((n >> ((3 - i) * 8)) & 0xF);
				}
			}
			else
			{
				for (var x:int = 0; x < 4; x++)
				{
					s += hexChars.charAt((n >> (x * 8 + 4)) & 0xF)
						+ hexChars.charAt((n >> (x * 8)) & 0xF);
				}
			}
			return s;
		}

	}
}
